﻿using System.Collections.Generic;
using Portal.Core;

namespace Portal.Helpers
{
    internal static class SpellLists
    {

        #region ====================  Buffs ====================
        internal static readonly HashSet<int> Stats = new HashSet<int> {
            117666,     //Legacy of the Emperor
            1126,       //Mark of The Wild
            20217,      //Blessing Of Kings
            90363,      //Embrace of the Shale Spider
        };

        internal static readonly HashSet<int> Stamina = new HashSet<int> {
            469,        //Commanding Shout
            6307,       //Imp. Blood Pact
            21562,      //Power Word: Fortitude
            90364,      //Qiraji Fortitude
        };

        internal static readonly HashSet<int> AttackPower = new HashSet<int> {
            19506,      //Trueshot Aura
            6673,       //Battle Shout
            57330,      //Horn of Winter
        };

        internal static readonly HashSet<int> SpellPower = new HashSet<int> {
            77747,      //Burning Wrath
            109773,     //Dark Intent
            61316,      //Dalaran Brilliance
            1459,       //Arcane Brilliance 
            126309,     //Still Water
        };

        internal static readonly HashSet<int> AttackSpeed = new HashSet<int> {
            30809,      //Unleashed Rage
            113742,     //Swiftblade's Cunning
            55610,      //Improved Icy Talons
            128432,     //Cackling Howl
            50498,      //Tear Armor

        };

        internal static readonly HashSet<int> SpellHaste = new HashSet<int> {
            24907,      //Moonkin Aura
            51470,      //Elemental Oath
            49868,      //Mind Quickening
        };

        internal static readonly HashSet<int> CriticalStrike = new HashSet<int> {
            1459,      //Arcane Brilliance
            61316,     //Dalaran Brilliance
            24932,     //Leader of The Pact
            116781,    //Legacy of the White Tiger
            97229,     //Bellowing Roar
            24604,    //Furious Howl
            90309,    //Terrifying Roar
            126373,   //Fearless Roar
            126309,   //Still Water

        };

        internal static readonly HashSet<int> Mastery = new HashSet<int> {
            116956,    //Grace of Air
            19740,     //Blessing of Might
            93435,    //Roar of Courage
            128997,  //Spirit Beast Blessing
        };


        public static HashSet<int> BuffRaidValid
        {
            get
            {
                return BRvalid;
            }
        }

        private static readonly HashSet<int> BRvalid = new HashSet<int> {
            // Mogu'shan Vaults
            117708,         // Maddening Shout -- Meng the Demented
            // Heart of Fear
            122784, 62402,  // Reshape Life -- Amber-Shaper Un'sok
            122740,         // Convert -- Imperial Vizier Zor'lok
            // Terrace of Endless Spring 
            // -- None
        };

        #endregion ====================  Buffs ====================

        #region Full Crowd Control List
        public static readonly HashSet<int> CrowdControlList = new HashSet<int>
            {
                30217, //Adamantite Grenade
                89766, //Axe Toss (Felguard/Wrathguard)
                90337, //Bad Manner (Monkey)
                710, //Banish
                113801, //Bash (Force of Nature - Feral Treants)
                102795, //Bear Hug
                76780, //Bind Elemental
                117526, //Binding Shot
                2094, //Blind
                105421, //Blinding Light
                115752, //Blinding Light (Glyph of Blinding Light)
                123393, //Breath of Fire (Glyph of Breath of Fire)
                126451, //Clash
                122242, //Clash (not sure which one is right)
                67769, //Cobalt Frag Bomb
                118271, //Combustion Impact
                33786, //Cyclone
                113506, //Cyclone (Symbiosis)
                7922, //Charge Stun
                119392, //Charging Ox Wave
                1833, //Cheap Shot
                44572, //Deep Freeze
                54786, //Portal Leap (Metamorphosis)
                99, //Disorienting Roar
                605, //Dominate Mind
                118895, //Dragon Roar
                31661, //Dragon's Breath
                77505, //Earthquake
                5782, //Fear
                118699, //Fear
                130616, //Fear (Glyph of Fear)
                30216, //Fel Iron Bomb
                105593, //Fist of Justice
                117418, //Fists of Fury
                3355, //Freezing Trap
                91800, //Gnaw
                1776, //Gouge
                853, //Hammer of Justice
                110698, //Hammer of Justice (Paladin)
                51514, //Hex
                2637, //Hibernate
                88625, //Holy Word: Chastise
                119072, //Holy Wrath
                5484, //Howl of Terror
                22703, //Infernal Awakening
                113056, //Intimidating Roar [Cowering in fear] (Warrior)
                113004, //Intimidating Roar [Fleeing in fear] (Warrior)
                5246, //Intimidating Shout (aoe)
                20511, //Intimidating Shout (targeted)
                24394, //Intimidation
                408, //Kidney Shot
                119381, //Leg Sweep
                126246, //Lullaby (Crane)
                22570, //Maim
                115268, //Mesmerize (Shivarra)
                5211, //Mighty Bash
                91797, //Monstrous Blow (Dark Transformation)
                6789, //Mortal Coil
                115078, //Paralysis
                113953, //Paralysis (Paralytic Poison)
                126355, //Paralyzing Quill (Porcupine)
                126423, //Petrifying Gaze (Basilisk)
                118, //Polymorph
                61305, //Polymorph: Black Cat
                28272, //Polymorph: Pig
                61721, //Polymorph: Rabbit
                61780, //Polymorph: Turkey
                28271, //Polymorph: Turtle
                9005, //Pounce
                102546, //Pounce (Incarnation)
                64044, //Psychic Horror
                8122, //Psychic Scream
                113792, //Psychic Terror (Psyfiend)
                118345, //Pulverize
                107079, //Quaking Palm
                13327, //Reckless Charge
                115001, //Remorseless Winter
                20066, //Repentance
                82691, //Ring of Frost
                6770, //Sap
                1513, //Scare Beast
                19503, //Scatter Shot
                132412, //Seduction (Grimoire of Sacrifice)
                6358, //Seduction (Succubus)
                9484, //Shackle Undead
                30283, //Shadowfury
                132168, //Shockwave
                87204, //Sin and Punishment
                104045, //Sleep (Metamorphosis)
                50519, //Sonic Blast (Bat)
                118905, //Static Charge (Capacitor Totem)
                56626, //Sting (Wasp)
                107570, //Storm Bolt
                10326, //Turn Evil
                20549, //War Stomp
                105771, //Warbringer
                19386, //Wyvern Sting
                108194, //Asphyxiate
            };

        #endregion

        #region Do Not Damage List

        public static readonly HashSet<int> DoNotDamageList = new HashSet<int>
            {
                76780,      // Bind Elemental (Shaman)
                //51514,      // Hex (Shaman)

                33786,      // Cyclone (Druid)
                2637,       // Hibernate (Druid)
                
                115078,     // Paralysis (Death Knight)
                48707,      // Anti-Magic Shield
                
                45438,      // Ice Block (Mage)
                115723,     // Ice Block (Mage) - Glyphed?
                56979,      // Ice Block (Mage) - Glyphed?
                118,        // Polymorph (Mage)
                61305,      // Polymorph: Black Cat (Mage)
                28272,      // Polymorph: Pig (Mage)
                61721,      // Polymorph: Rabbit (Mage)
                61780,      // Polymorph: Turkey (Mage)
                28271,      // Polymorph: Turtle (Mage)

                642,        // Divine Shield (Paladin)
                1022,       // Hand of Protection (Paladin)
                20066,      // Repentance (Paladin)

                2094,       // Blind (Rogue)
                1776,       // Gouge (Rogue)
                113953,     // Paralysis (Paralytic Poison - Rogue)
                6770,       // Sap (Rogue)
                76577,      // Smoke Bomb (Rogue)
                56819,      // Smoke Bomb (Glyph) (Rogue)
                116595,     // Smoke Bomb (Rogue)

                113506,     // Cyclone (Symbiosis - Priest?)
                9484,       // Shackle Undead (Priest)

                710,        // Banish (Warlock)
                115268,     // Mesmerize (Shivarra - Warlock Pet)
                104045,     // Sleep (Metamorphosis - Warlock)

                3355,       // Freezing Trap (Hunter)
                126355,     // Paralyzing Quill (Porcupine - Hunter Pet)
                126423,     // Petrifying Gaze (Basilisk - Hunter Pet)
                1513,       // Scare Beast (Hunter)
                19503,      // Scatter Shot (Hunter)
                19386,      // Wyvern Sting (Hunter)
                19263,      // Deterrence (Hunter - Spell Reflect)

                23920,      // Spell Reflection (Warrior)
                114028      // Mass Spell Reflection (Warrior)
            };

        #endregion

        #region Player Cooldowns Lists

        public static readonly HashSet<int> PlayerCooldown = new HashSet<int>
            {
                // Death Knight
                SpellId.PillarofFrost,
                SpellId.EmpowerRuneWeapon,
                SpellId.UnholyFrenzy,
                SpellId.DarkTransformation,

                // Druid
                SpellId.Berserk,
                102543,     // Incarnation: Cat Form
                102558,     // Incarnation: Bear Form
                102560,     // Incarnation: Moonkin Form

                // Hunter
                19574,      // Beastial Wrath
                SpellId.RapidFire,

                // Mage
                SpellId.IcyVeins,
                SpellId.TimeWarp,
                SpellId.ArcanePower,

                // Monk
                123904,     // Invoke Xuen, the White Tiger

                // Paladin
                SpellId.AvengingWrath,
                SpellId.HolyAvenger,
                SpellId.GuardianofAncientKings,

                // Priest
                SpellId.PowerInfusion,

                // Rogue
                SpellId.ShadowDance,
                SpellId.Vanish,
                SpellId.AdrenalineRush,
                SpellId.ShadowBlades,
                //SpellId.Evasion,
                SpellId.SmokeBomb,
                SpellId.CloakofShadows,

                // Shaman
                114050,     // Elemental Ascendance
                114051,     // Enhancement Ascendance
                SpellId.StormlashTotem,
                SpellId.ShamanisticRage,
                SpellId.ElementalMastery,
                SpellId.Heroism,
                SpellId.Bloodlust,
                
                // Warlock
                SpellId.DarkSoulMisery,
                SpellId.DarkSoulKnowledge,
                SpellId.DarkSoulInstability,
                SpellId.UnendingResolve,

                // Warrior
                SpellId.Recklessness,
                SpellId.Avatar,
                SpellId.SkullBanner,
                SpellId.Bladestorm
            };

        public static readonly HashSet<int> MeleeDisarmCooldown = new HashSet<int>
            {
                // Druid
                SpellId.Berserk,
                102543,     // Incarnation: Cat Form
                102558,     // Incarnation: Bear Form

                // Warrior
                SpellId.Recklessness,
                SpellId.Avatar,
                //SpellId.SkullBanner,
                //SpellId.Bladestorm,

                // Shaman
                114051,     // Enhancement Ascendance
                SpellId.ElementalMastery,
                SpellId.Heroism,
                SpellId.Bloodlust,

                // Rogue
                SpellId.ShadowDance,
                SpellId.AdrenalineRush,
                SpellId.ShadowBlades,
                SpellId.Vendetta,

                // Paladin
                SpellId.AvengingWrath,
                SpellId.HolyAvenger,

                // Hunter
                19574,      // Beastial Wrath
                SpellId.RapidFire,

                // Death Knight
                SpellId.PillarofFrost,
                SpellId.UnholyFrenzy,
            };

        #endregion

        #region Target Dummies

        public static readonly HashSet<uint> TargetDummies = new HashSet<uint>
            {
                31146, // Raider's
                54344, // Highlord's Nemesis Trainer (Ebon Hold)
                46647, // 81-85
                32546, // Ebon Knight's (DK)
                31144, // 79-80
                32543, // Veteran's (Eastern Plaguelands)
                32667, // 70
                32542, // 65 EPL
                32666, // 60
                30527, // ?? Boss one (no idea?)
                67127, // MoP Trainings Dummy
                88375, // Turnip Punching Bag -- Item Id
            };

        #endregion

        #region Spell Interupts
        public static readonly HashSet<int> SpellInteruptIds = new HashSet<int>
            {
                // PvP
                34490,      // Silencing Shot       - 24s CD (40yd Range)
                102060,     // Disrupting Shout     - 40s CD (10yd Range)
				106839,     // Skull Bash           - 15s CD (Melee Range)
				80964,      // Skull Bash           - 15s CD (Melee Range)
				115781,     // Optical Blast        - 24s CD (40yd Range)
				116705,     // Spear Hand Strike    - 15s CD (Melee Range)
				1766,       // Kick                 - 15s CD (Melee Range)
				19647,      // Spell Lock           - 24s CD (40yd Range)
				2139,       // Counterspell         - 24s CD (40yd Range)
				47476,      // Strangulate          - 60s CD (30yd Range)
				47528,      // Mind Freeze          - 15s CD (Melee Range)
				57994,      // Wind Shear           - 12s CD (25yd Range)
				6552,       // Pummel               - 15s CD (Melee Range)
				96231,      // Rebuke               - 15s CD (Melee Range)
            };
        
        #endregion

        #region Unable To Silence Aura

        public static readonly HashSet<int> UnableToSilenceAura = new HashSet<int>
            {
                // Warlock
                SpellId.UnendingResolve,

                // Paladin
                SpellId.DevotionAura,

                // Priest
                SpellId.InnerFocus,

                // Monk
                124487, // Zen Focus

                // Shaman
                SpellId.SpiritwalkersGrace, // 4pc PvP bonus adds immunity
            };

        #endregion

        #region Arena Ignore Units
        public static readonly HashSet<uint> ArenaIgnoreUnits = new HashSet<uint>
            {
                // Warrior
                59399,  // Skull Banner
                59398,  // Demoralizing Banner
                59390,  // Mocking Banner

                // Monk
                60849,  // Jade Serpent Statue
                61146,  // Black Ox Statue

                // Warlock
                55659,  // Wild Imp

                // Priest
                64571,  // Lightspring

           };

        #endregion

        #region Ignore Units

        public static readonly HashSet<uint> IgnoreUnits = new HashSet<uint>
            {
            69596,      // Throne of Thunder - Ice Comet
            };
        #endregion

        #region Don't cast when target casting ID

        public static readonly HashSet<int> StopCastingOnTargetCastId = new HashSet<int>
            {
                137457, // Oondasta - Piercing Roar
                139867, // Dark Animus - Interrupting Jolt (Heroic)
                139869, // Dark Animus - Interrupting Jolt (Raid Finder)
                138763, // Dark Animus - Interrupting Jolt (Normal)
            };
        #endregion

        #region Totem List

        public static readonly HashSet<uint> TotemList = new HashSet<uint>
            {
                5913,   // Tremor Totem
                2523,   // Searing Totem
                2630,   // Earthbind Totem
                3527,   // Healing Stream Totem
                5929,   // Magma Totem
                5925,   // Grounding Totem
                61245,  // Capacitor Totem
                62002,  // Stormlash Totem
                5874,   // Strength of Earth Totem
                15430,  // Earth Elemental Totem
            };

        #endregion

        #region Polymorph IDs

        public static readonly HashSet<int> PolymorphIds = new HashSet<int>
            {
                118,        // Polymorph (Mage)
                61305,      // Polymorph: Black Cat (Mage)
                28272,      // Polymorph: Pig (Mage)
                61721,      // Polymorph: Rabbit (Mage)
                61780,      // Polymorph: Turkey (Mage)
                28271,      // Polymorph: Turtle (Mage)
            };

        #endregion

        #region Conjured Refreshment Ids

        public static readonly HashSet<uint> ConjuredRefreshments = new HashSet<uint>
            {
                65500,  // Conjured Mana Cookie
                65515,  // Conjured Mana Brownie
                65516,  // Conjured Mana Cupcake
                65517,  // Conjured Mana Lollipop
                43528,  // Conjured Mana Pie
                43523,  // Conjured Mana Strudel
                65499,  // Conjured Mana Cake
                80618,  // Conjured Mana Buns
                80610,  // Conjured Mana Pudding
            };

        #endregion

        #region Slowed/Rooted/Stunned

        public static readonly HashSet<int> SlowedRootedStunned = new HashSet<int>
            {
                    96294, //Chains of Ice (Chilblains)
                    116706, //Disable
                    64695, //Earthgrab (Earthgrab Totem)
                    339, //Entangling Roots
                    113770, //Entangling Roots (Force of Nature - Balance Treants)
                    19975, //Entangling Roots (Nature's Grasp)
                    113275, //Entangling Roots (Symbiosis)
                    113275, //Entangling Roots (Symbiosis)
                    19185, //Entrapment
                    33395, //Freeze
                    63685, //Freeze (Frozen Power)
                    39965, //Frost Grenade
                    122, //Frost Nova
                    110693, //Frost Nova (Mage)
                    55536, //Frostweave Net
                    87194, //Glyph of Mind Blast
                    111340, //Ice Ward
                    45334, //Immobilized (Wild Charge - Bear)
                    90327, //Lock Jaw (Dog)
                    102359, //Mass Entanglement
                    128405, //Narrow Escape
                    13099, //Net-o-Matic
                    115197, //Partial Paralysis
                    50245, //Pin (Crab)
                    91807, //Shambling Rush (Dark Transformation)
                    123407, //Spinning Fire Blossom
                    107566, //Staggering Shout
                    54706, //Venom Web Spray (Silithid)
                    114404, //Void Tendril's Grasp
                    4167, //Web (Spider)
                    50433, //Ankle Crack (Crocolisk)
                    110300, //Burden of Guilt
                    35101, //Concussive Barrage
                    5116, //Concussive Shot
                    120, //Cone of Cold
                    3409, //Crippling Poison
                    18223, //Curse of Exhaustion
                    45524, //Chains of Ice
                    50435, //Chilblains
                    121288, //Chilled (Frost Armor)
                    1604, //Dazed
                    63529, //Dazed - Avenger's Shield
                    50259, //Dazed (Wild Charge - Cat)
                    26679, //Deadly Throw
                    119696, //Debilitation
                    116095, //Disable
                    123727, //Dizzying Haze
                    3600, //Earthbind (Earthbind Totem)
                    77478, //Earthquake (Glyph of Unstable Earth)
                    123586, //Flying Serpent Kick
                    113092, //Frost Bomb
                    54644, //Frost Breath (Chimaera)
                    8056, //Frost Shock
                    116, //Frostbolt
                    8034, //Frostbrand Attack
                    44614, //Frostfire Bolt
                    61394, //Frozen Wake (Glyph of Freezing Trap)
                    1715, //Hamstring
                    13810, //Ice Trap
                    58180, //Infected Wounds
                    118585, //Leer of the Ox
                    15407, //Mind Flay
                    12323, //Piercing Howl
                    115000, //Remorseless Winter
                    20170, //Seal of Justice
                    47960, //Shadowflame
                    31589, //Slow
                    129923, //Sluggish (Glyph of Hindering Strikes)
                    61391, //Typhoon
                    51490, //Thunderstorm
                    127797, //Ursol's Vortex
                    137637, //Warbringer
            };

        #endregion
    }
}
